﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorDeFlotasDesktop.Classes;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.AbmRol
{
    public partial class frmNuevoRol : Form
    {
        private List<ComboBox> cmbList = new List<ComboBox>();

        public frmNuevoRol()
        {
            InitializeComponent();
        }
        public Rol oRol;
        public List<Funcionalidad> listaRolNuevo = new List<Funcionalidad>();
        public frmNuevoRol(String nombreDelRol)
        {
            InitializeComponent();
            txtNombreRol.Text = nombreDelRol;
        }
        private void limpiarDgv()
        {
            dataGridView1.DataSource=null;
            
        }
        private void cargarFuncionalidades()
        {
            SqlInterface.Conectar();
            Funcionalidades oFunc = new Funcionalidades();
            cmbFuncionalidades.DataSource = oFunc.getAllFuncionalidades();
            cmbFuncionalidades.ValueMember = "intCodFuncionalidad";
            cmbFuncionalidades.DisplayMember = "strFuncionalidad";
            SqlInterface.Desconectar();
            
        }
        public void cargarCrearRol()
        {
            cargarFuncionalidades();
            btnCrear.Visible = true;
            oRol = new Rol();
        }
        public void cargarModificarRol()
        {
            cargarFuncionalidades();
            txtNombreRol.Text = oRol.strNombre;
            chkHabilitado.Checked = oRol.blnHabilitado;
            dataGridView1.DataSource = oRol.lstFuncionalidad;
            btnAceptar.Visible = true;
        }
        private void btnCrear_Click(object sender, EventArgs e)//,String nombreDelRol)
        {
            if (txtNombreRol.Text.Length == 0 || txtNombreRol.Text.Length > 255)
            {
                MessageBox.Show("El nuevo rol debe tener un nombre, y este no debe ser mayor a 255 caracteres.");
                return;
            }
            SqlInterface.Conectar();
            Roles oRoles = new Roles();
            int intCodRol = oRoles.insert(txtNombreRol.Text);
            if ( intCodRol != 0)
            {
                SqlInterface.Desconectar();
                if (dataGridView1.Rows.Count > 0)
                {
                    List<Funcionalidad> lstFuncionalidad = new List<Funcionalidad>();
                    for (int a = 0; a < dataGridView1.Rows.Count; a++)
                    {
                        SqlInterface.Conectar();
                        int i= oRoles.insertRolFunc(intCodRol,((Funcionalidad)dataGridView1.Rows[a].DataBoundItem).intCodFuncionalidad);
                        SqlInterface.Desconectar();
                    }
                }
            }
            else
            {
                MessageBox.Show("No se pudo crear el rol");
            }
            SqlInterface.Desconectar();
            //// Chequear que se hayan elegido funcionalidades!

            //SqlInterface.Conectar();
            //List<SqlParameter> argumentos = new List<SqlParameter>();
            //SqlParameter argumento = new SqlParameter();

            //argumento.ParameterName = "@nombreRol";
            //argumento.Value = txtNombreRol.Text;
            //argumentos.Add(argumento);
            
            //SqlDataReader nuevoRol = SqlInterface.ExecuteReader("SQUIRTLE.spCrearRol",CommandType.StoredProcedure,argumentos);
            //int rol = Convert.ToInt32(nuevoRol.Read());
            //nuevoRol.Close();

            //argumentos.Clear();
            //int result;
            //foreach(ComboBox member in cmbList)
            //{
            //    if (member.SelectedText.Length != 0)
            //    {
            //        argumento.ParameterName = "@rol";
            //        argumento.Value = rol;
            //        argumentos.Add(argumento);
                    
            //        argumento.ParameterName = "@func";
            //        argumento.Value = member.SelectedValue;
            //        argumentos.Add(argumento);
                    
            //        result = SqlInterface.ExecuteNonQuery("SQUIRTLE.spAltaRolFuncionalidad",
            //                CommandType.StoredProcedure,argumentos);
            //        if (result == -1)
            //        {
            //            MessageBox.Show("Error al ingresar la funcionalidad " + member.SelectedText + ".\n"
            //                        + "Tal funcionalidad ya existe para el rol.");
            //        }

            //    };
            //}
            //argumentos.Clear();
            //SqlInterface.Desconectar();
        }

        private void frmNuevoRol_Load(object sender, EventArgs e)
        {
            
        }

        private void frmNuevoRol_FormClosed(object sender, FormClosedEventArgs e)
        {
            btnCrear.Visible = false;
            btnAceptar.Visible = false;
            txtNombreRol.Text = "";
            oRol = new Rol();
            cmbFuncionalidades.DataSource = null;
        }
        private bool funcionalidadAsignada(Funcionalidad oFunc)
        {

            for (int a = 0; a < dataGridView1.Rows.Count; a++)
            {
                if (((Funcionalidad)dataGridView1.Rows[a].DataBoundItem).intCodFuncionalidad == oFunc.intCodFuncionalidad)
                    return true;

            }
            return false;
        }
        private void btnAgregarFunc_Click(object sender, EventArgs e)
        {
            Funcionalidad oFunc = new Funcionalidad();
            Roles oRoles = new Roles();
            oFunc.strFuncionalidad = cmbFuncionalidades.Text;
            oFunc.intCodFuncionalidad =Convert.ToInt32(cmbFuncionalidades.SelectedValue);
            if (funcionalidadAsignada(oFunc))
            {
                MessageBox.Show("Esa funcionalidad ya ha sido agregada");
                return;
            }
            limpiarDgv();
            if (oRol.lstFuncionalidad == null)
            {
                listaRolNuevo.Add(oFunc);
                dataGridView1.DataSource = listaRolNuevo;
            }
            else
            {
                oRol.lstFuncionalidad.Add(oFunc);
                dataGridView1.DataSource = oRol.lstFuncionalidad;
            }
            

            
            
            
            cmbFuncionalidades.ValueMember = "intCodFuncionalidad";
            cmbFuncionalidades.DisplayMember = "strFuncionalidad";
            if (dataGridView1.Rows.Count > 0)
            {
                dataGridView1.Columns[0].HeaderText = "Codigo";
                dataGridView1.Columns[1].HeaderText = "Nombre";
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            SqlInterface.Conectar();
            oRol.strNombre = txtNombreRol.Text;
            oRol.blnHabilitado = chkHabilitado.Checked;
            Roles oRoles = new Roles();
            oRoles.updateRol(oRol);
            SqlInterface.Desconectar();
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            Roles oRoles = new Roles();
            if (dataGridView1.Rows.Count > 0)
            {
                
                if (oRol.lstFuncionalidad == null)
                {
                    listaRolNuevo.Remove((Funcionalidad)dataGridView1.CurrentRow.DataBoundItem);
                    limpiarDgv();
                    dataGridView1.DataSource = listaRolNuevo;
                }
                else
                {
                    SqlInterface.Conectar();
                    oRol.lstFuncionalidad.Remove((Funcionalidad)dataGridView1.CurrentRow.DataBoundItem);
                    oRoles.deleteRolFunc(oRol.intCodigo, ((Funcionalidad)dataGridView1.CurrentRow.DataBoundItem).intCodFuncionalidad);
                    limpiarDgv();
                    dataGridView1.DataSource = oRol.lstFuncionalidad;
                    SqlInterface.Desconectar();
                }
                
                
                cmbFuncionalidades.ValueMember = "intCodFuncionalidad";
                cmbFuncionalidades.DisplayMember = "strFuncionalidad";
                dataGridView1.Columns[0].HeaderText = "Codigo";
                dataGridView1.Columns[1].HeaderText = "Nombre";
            }
        }

    }
}
